package com.cskaoyan.config;

import com.cskaoyan.service.UserService;
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * 类名自己定义就行了 → 通常名字叫xxxConfiguration
 * @author stone
 * @date 2022/03/22 17:13
 */
@Configuration // 把当前类注册为容器中的组件（可以使用注入功能注解），通过也作为配置类（注册组件、配置）
@ComponentScan("com.cskaoyan")
@EnableAspectJAutoProxy
public class JavaConfig {

    //@Autowired
    //@Qualifier("userServiceImpl")
    //UserService userService;
    /**
     * @Bean注解是用来注册组件
     * 返回值：作为容器中的组件
     * 形参：会默认按照类型从容器中取出组件,如果该类型的组件不止一个，可以使用@Qualifier来指定组件id
     * 组件id：默认值是方法名；也可以使用@Bean注解的value属性
     */
    @Bean("serviceProxy")
    public ProxyFactoryBean proxyFactoryBean(@Qualifier("userServiceImpl")UserService userService) {
        ProxyFactoryBean proxyFactoryBean = new ProxyFactoryBean();
        proxyFactoryBean.setTarget(userService);
        proxyFactoryBean.setInterceptorNames("helloWorldInterceptor");
        return proxyFactoryBean;
    }
}
